package ar.edu.utn.frsf.died2013.tp1;

/**
 *
 * Clase que representa los Clientes e implementa los metodos Abstractos de la Clase persona
 * 
 * @author Balestra, Milton  - milton.balestra@gmail.com
 * @author Cicerchia, Martin - m.f.cicerchia@gmail.com
 * @author Paletto, Pablo 	 - pablo.paletto@gmail.com
 * 
 * 
 * */

public class Cliente extends Persona {
	final int _PRODUCTOS_ELEGIDOS = 3;
	//vector que guarda los codigos correspondientes a los productos elegidos
	int[] codigosDeProductosElegidos = new int[_PRODUCTOS_ELEGIDOS]; 
	
	// 0 = 1000
	// 1 = 750
	// 2 = 500


	/**Definicion e Implementacion de Constructores de Cliente*/
	public Cliente(String nombre, String apellido, String email, int dni) {
		super(nombre, apellido, email, dni);
	}

	public Cliente(String name) {
		super(name);
	}

	public Cliente(String nombre, String apellido) {
		super(nombre, apellido);
	}

	public Cliente(String nombre, String apellido, int codigo) {
		super(nombre, apellido, codigo);
	}

	public Cliente(){
		
	}
	
	/**Implementacion de Metodos de Instancia*/
	/**Metodo para elegir tres productos no repetidos del ranking*/
	public void elegirProductos(Producto[] ranking) {
		int codigoProductoElegido; // indice que indica el codigo del producto elegido (entre 1 y 100)

		int i = 0;
		codigosDeProductosElegidos[i] = new GeneradorTiempoRandom().generarTiempo(0, 100);// asigno al primer elemento un codigo
		while (!(i == _PRODUCTOS_ELEGIDOS - 1)) { // elijo 3 codigos distintos

			codigoProductoElegido = new GeneradorTiempoRandom().generarTiempo(0, 100); // elijo otro y valido que no sea el mismo q el anterior

			if (!(perteneceCodigo(codigoProductoElegido, codigosDeProductosElegidos))) { // si no pertenece lo agrego
				codigosDeProductosElegidos[++i] = codigoProductoElegido;
			}
		}

		/*Se llama al metodo puntuarProductos que actualiza el ranking*/
		this.puntuarProductos(codigosDeProductosElegidos, ranking);
		
		/** Se imprime el codigo de los productos que eligio el cliente*/
		for (int e : codigosDeProductosElegidos)
			System.out.println("Producto elegido: " + e);

	}
	
	/**Metodo para validar que no existan productos elegidos mas de una vez por el mismo cliente*/
	boolean perteneceCodigo(int cod, int[] listaCodigos) { 
		int k = 0;
		while (k < listaCodigos.length) {
			if (cod == listaCodigos[k]) {
				return true;
			}
			k++;
		}
		return false;
	}
	
	/** Metodo para asignarles un puntaje a los productos segun el orden en que fueron elegidos*/
	public void puntuarProductos(int[] codigos, Producto[] ranking){
		for(int i=0;  i<ranking.length; i++){
			if(ranking[i].getCodigo() == codigos[0]){
				ranking[i].setPuntaje((int) (ranking[i].getPuntaje()+1000));
			}
			if (ranking[i].getCodigo() == codigos[1]){
				ranking[i].setPuntaje((int) (ranking[i].getPuntaje()+750));
			}
			if (ranking[i].getCodigo() == codigos[2]){
				ranking[i].setPuntaje((int) (ranking[i].getPuntaje()+500));
			}
		}
	}
}
